package com.guiguli.FileDemo;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileDemo1 {
    public static void main(String[] args) throws IOException {
        //1.文件信息
        fileInformation();
        //2.创建和删除文件
        create_delete_file();
        //3.创建和删除目录
        create_delete_directory();
        //4.遍历D:/自用下所有目录的文件(也可过滤)
        traverse_directory();
    }

    public static void fileInformation() {
        String path = "D:\\ideaProject\\day03-code\\src\\com\\guiguli\\FileDemo\\"; // 指定文件所在的目录
        File f = new File(path, "testFile.txt"); // 建立File变量,并设定由f变量引用
        System.out.println("testFile.txt文件信息如下：");
        System.out.println("============================================");
        System.out.println("文件长度：" + f.length() + "字节");
        System.out.println("文件或者目录：" + (f.isFile() ? "是文件" : "不是文件"));
        System.out.println("文件或者目录：" + (f.isDirectory() ? "是目录" : "不是目录"));
        System.out.println("是否可读：" + (f.canRead() ? "可读取" : "不可读取"));
        System.out.println("是否可写：" + (f.canWrite() ? "可写入" : "不可写入"));
        System.out.println("是否隐藏：" + (f.isHidden() ? "是隐藏文件" : "不是隐藏文件"));
        System.out.println("最后修改日期：" + new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(new Date(f.lastModified())));//这里的嵌套需要注意一下
        System.out.println("文件名称：" + f.getName());
        System.out.println("文件路径：" + f.getPath());
        System.out.println("绝对路径：" + f.getAbsolutePath());
    }

    public static void create_delete_file() throws IOException {
        File f = new File("D:\\ideaProject\\day03-code\\src\\com\\guiguli\\FileDemo\\1.txt"); // 创建指向文件的File对象
        if (f.exists()) // 判断文件是否存在
        {
            f.delete(); // 存在则先删除
        }
        f.createNewFile(); // 再创建
    }

    public static void create_delete_directory() throws IOException {
        String path = "D:\\ideaProject\\day03-code\\src\\com\\guiguli\\FileDemo\\Test"; // 拼凑出可以适应操作系统的路径
        File f = new File(path);
        if (f.exists()) // 判断目录是否存在
        {
            f.delete(); // 存在则先删除
        }
        f.mkdir(); // 再创建
    }

    public static void traverse_directory() {
        File f = new File("D:/自用");
        System.out.println("文件名称\t\t文件类型\t\t文件大小");
        System.out.println("=======================================");
        //String fileList[] = f.list();
        //我们可以使用可传入函数对象版本的list，指定我们需要的文件(目录)后缀
        String[] fileList = f.list((File dir, String name) -> {
            return name.endsWith(".png") ;
        });
        for (var i : fileList) {
            var a = new File("D:/", i).isFile() ? "文件\t\t\t" : "文件夹\t\t\t";
            var b = new File("D:/", i).length() + "字节\t\t\t";
            System.out.println(i + "\t\t\t" + a + b);
        }
    }
}
